`timescale 1ns / 1ps

module TB_BMG_Write();

// 输入信号声明
// reg         rst_n;
reg         clk_in;
reg         flag;
reg [7:0]   sdata_in;
reg         read_ack;

// 输出信号声明
wire [3:0]  bram_we;
wire [31:0] bram_addr;
wire [31:0] bram_din;
wire        bram_en;
wire        bram_rst_n;
// wire        bram_clk;


// 实例化被测模块
BMG_Write uut (
    // .rst_n(rst_n),
    .clk_in(clk_in),
    .flag(flag),
    .read_ack(read_ack),
    .sdata_in(sdata_in),
    .bram_we(bram_we),
    .bram_addr(bram_addr),
    .bram_din(bram_din),
    .bram_en(bram_en), 
    // .bram_clk(bram_clk),   
    .bram_rst_n(bram_rst_n)

);

// 时钟生成
parameter CLK_PERIOD = 10; // 100MHz时钟
always begin
    clk_in = 0;
    forever #(CLK_PERIOD/2) clk_in = ~clk_in;
end

// 测试序列
initial begin
    // 初始化信号
    // rst_n = 0;
    flag = 0;
    read_ack = 0;
    
    // 应用复位
    // #20 rst_n = 1;

    #50 
    flag = 1;
    sdata_in = 8'h01;
    #30 flag = 0;
    
    #100
    flag = 1;
    sdata_in = 8'ha2;
    #30 flag = 0;
    #100 read_ack = 1;
    #50 read_ack = 0;

    #100 
    flag = 1;
    sdata_in = 8'hcc;
    #30 flag = 0;
    // #20 read_ack = 1;
    // #20 read_ack = 0;

    #100 
    flag = 1;
    sdata_in = 8'hcd;
    #30 flag = 0;
    #100 read_ack = 1;
    #50 read_ack = 0;

    // $finish;
end


// 状态机状态监控（可选，如果需要调试状态转换）
// 注意：由于状态寄存器是模块内部的，这里无法直接访问
// 如果需要监控状态，需要在模块中添加调试输出

endmodule